Tensorlistgetitem ================= 从张量列表中获取指定索引的张量数据。该算子将输入张量列表中的特定元素复制到输出张量中,支持多种数据类型。 .. math:: \text{output\_tensor} = \text{input\_tensor\_list}[\text{index}] 其中 `input_tensor_list` 是输入的张量列表,`index` 是要获取的元素索引,`output_tensor` 是输出张量。 输入: - **src** - 输入张量指针,指向要获取的张量数据。 - **dst** - 输出张量指针,用于存储获取的张量数据。 - **data_type** - 数据类型对应的字节数,如果为0,表示kTypeUnknown(未知类型)。 - **length** - 元素个数,默认dst和src元素个数相等。 - **core_mask** - 核掩码(int),仅共享存储版本需要。 输出: - **dst** - 输出张量指针,存储从输入张量列表获取的数据。 支持平台: ``FT78NE`` ``MT7004`` .. note:: - 该算子不区分具体的数据类型,数据类型信息通过data_type参数传递 - 当data_type为0(kTypeUnknown)时,算子会将输出张量的内存清零 - 当data_type不为0时,算子会按字节复制数据 - 调用前需要确保dst指向的内存空间足够大(至少length个元素) **共享存储版本:** .. c:function:: void tensorlistgetitem_s(void *src, void *dst, int data_type, int length, int core_mask) **C调用示例(共享存储版本):** .. code-block:: c :linenos: :emphasize-lines: 14 //FT78NE示例 #include #include int main(int argc, char* argv[]) { // 假设在DDR空间 float *src = (float *)0xA0000000; // 输入张量数据 float *dst = (float *)0xB0000000; // 输出张量数据 int data_type = 4; // float类型,4字节 int length = 10; // 10个元素 int core_mask = 0xff; // 核掩码 // 调用共享存储版本的函数 tensorlistgetitem_s(src, dst, data_type, length, core_mask); return 0; } **共享存储版本:** .. c:function:: void tensorlistgetitem_p(void *src, void *dst, int data_type, int length) **C调用示例(私有存储版本):** .. code-block:: c :linenos: :emphasize-lines: 11 #include #include int main(int argc, char* argv[]) { void *src = (void *)0x10000000; void *dst = (void *)0x10010000; int data_type = 0; // kTypeUnknown int length = 10; // 10个元素(以字节为单位) // 当data_type为0时,dst将被清零 tensorlistgetitem_p(src, dst, data_type, length); return 0; }